package com.example.common.vo.order;

import com.alibaba.fastjson.JSONObject;
import com.example.common.entity.member.MemberReceiveAddressEntity;
import com.example.common.vo.cart.CartItemVo;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *      订单确认页需要的数据
 * </p>
 *
 * @author zyred
 * @since v 0.1
 **/
public class OrderConfirmVo {


    /** 用户所有的收货地址列表 **/
    @Setter
    @Getter
    private List<MemberReceiveAddressEntity> address;
    /** 所有选中的购物项 **/
    @Setter
    @Getter
    private List<CartItemVo> items;
    /** 优惠券信息 **/
    @Setter
    @Getter
    private Integer integration;
    /** 订单总额 **/
    private BigDecimal total;
    /** 支付总额 **/
    private BigDecimal payTotal;
    /** 防止重复提交令牌 **/
    @Setter
    @Getter
    private String orderToken;

    private int productCount;


    public BigDecimal getTotal() {

        BigDecimal d = BigDecimal.ZERO;
        for (CartItemVo item : this.items) {
            d = d.add(
                    item.getPrice()
                            .multiply(BigDecimal.valueOf(item.getCount()))
            );
        }
        return d;
    }

    public BigDecimal getPayTotal() {
        return total;
    }

    public int getProductCount() {
        return items.stream().mapToInt(CartItemVo::getCount).sum();
    }

    @Override
    public String toString() {
        return JSONObject.toJSONString(this);
    }
}
